iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Software Development

奶茶裡藏的資料結構(Kotlin範例)系列 第 16

ArrayList 與 LinkedList 的真實人氣差距

  • 分享至 

  • xImage
  •  

「雖然說是各有優缺,但實際上,在程式設計裡 ArrayList 幾乎是預設選擇。」學長聳聳肩,語氣很肯定,「因為效能、快取友善度、記憶體效率都更好。」

我皺著眉頭,忍不住反駁:「難道不是 ArrayList 的做法比較浪費記憶體嗎?畢竟每次容量不夠,就得整批重新搬家,不是很麻煩嗎?」

「聽起來是這樣沒錯,但實際上大小通常是可以預測的。」學長解釋,「只要一開始抓個大概的容量,就不需要一直搬來搬去。反倒是 LinkedList,每個節點除了存值,還得多存一個指標。長久下來,記憶體開銷更大。」

「喔⋯⋯」我點點頭,腦中浮現換場地時,不但要帶著場地設備,還要額外背一個箭頭標示牌,好沈重⋯⋯

「還有更關鍵的地方,」學長把手指輕敲桌子,強調道,「CPU 在存取資料時,通常會一口氣把一段連續的記憶體搬進快取。ArrayList 剛好就是連續的,所以讀取起來飛快。但 LinkedList 的記憶體是零零落落的,CPU 得到處跑來跑去,累得半死,才能湊齊資料。」

我忍不住插嘴:「可是,你之前不是說過 LinkedList 在插入、刪除比較方便嗎?這樣總該有某些場合比較合適吧?」

學長笑著搖頭:「方便是方便,但有前提——你得先找到那個位置。問題是 LinkedList 找位置本來就慢,要一個個順著指標找下去。等你找到,再去插入或刪除,整體還是慢得驚人。所以綜合下來,大多數情況 ArrayList 更實用。」

我歪著頭問:「那我們幹嘛還要學 LinkedList?」

「哈哈,因為演算法題會考啊。」學長拍了拍我的肩,「在演算法世界裡,題目不會乖乖告訴你目標大小,很多情境都設計得很特殊。這時 LinkedList 就能派上用場。但是我們平時寫程式的話,十之八九還是用 ArrayList。」


上一篇
當活動場地爆滿時——ArrayList 與 LinkedList 的抉擇
下一篇
Kotlin 裡的 Java 老朋友:LinkedList 範例
系列文
奶茶裡藏的資料結構(Kotlin範例)21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言